package team.kirohuji.service;

import java.util.List;
import java.util.Map;

import team.kirohuji.domain.Priority;

/**
 * 权限业务服务
 * 
 * @author kirohuji
 *
 */
public interface PriorityService {

	/**
	 * 菜单类型
	 */
	public enum MenuType {
		/**
		 * 目录
		 */
		CATALOG(0),
		/**
		 * 菜单
		 */
		MENU(1),
		/**
		 * 按钮
		 */
		BUTTON(2);

		private int value;

		private MenuType(int value) {
			this.value = value;
		}

		public int getValue() {
			return value;
		}
	}

	List<Priority> findAll();

	/**
	 * 根据父菜单，查询子菜单
	 * 
	 * @param parentId
	 *            父菜单ID
	 * @param priorityType
	 *            权限类型：0-系统后台用户权限，1-微信端用户权限
	 * @param menuIdList
	 *            用户菜单ID
	 * @return Priority列表
	 */
	List<Priority> queryListParentId(Integer parentId, Integer priorityType, List<Integer> menuIdList);

	/**
	 * 后台 获取 非按钮的 权限菜单集合 获取不包含按钮的菜单列表
	 * 
	 * @return Priority列表
	 */
	List<Priority> queryNotButtonList();

	/**
	 * 获取用户菜单列表
	 * 
	 * @param userId
	 *            用户ID
	 * @param priorityType
	 *            权限类型：0-系统后台用户权限，1-微信端用户权限
	 * @return Priority列表
	 */
	List<Priority> getUserMenuList(Integer userId, Integer priorityType);

	/**
	 * 获取所有菜单列表
	 * 
	 * @param menuIdList
	 *            菜单Id列表
	 * @param priorityType
	 *            类型
	 * @return Priority列表
	 */
	List<Priority> getAllMenuList(List<Integer> menuIdList, Integer priorityType);

	/**
	 * 递归获取菜单树
	 * 
	 * @param menuList
	 *            菜单列表
	 * @param priorityType
	 *            类型
	 * @param menuIdList
	 *            菜单Id列表
	 * @return Priority列表
	 */
	List<Priority> getMenuTreeList(List<Priority> menuList, Integer priorityType, List<Integer> menuIdList);
	
	/**
	 * 获取菜单根据priority_type
	 * @param priorityType
	 * @return Priority列表
	 */
	List<Priority> queryPriorityByPriorityType(String priorityType);
	/**
	 * 列出所有父权限
	 * 
	 * @return Priority列表
	 */
	List<Priority> queryParentPriority();
}
